package com.wanghua.spring.test.i18n;

import java.text.MessageFormat;
import java.util.MissingResourceException;
import java.util.ResourceBundle;

/**
 * i18n资源国际化。
 * properties文件中保存的是 key-value 形式的属性对，*_zh_Ch.properties 文件虽然保存的是中文，但并不是直接保存中文的，而是UTF-8编码之后的中文，所以此文件中的
 * 资源必须经过编码，必须是ASCII字符。Unicode 转 ASCII 可以使用 JDK 自带的 native2asii.exe 工具。idea 中简单配置下就可，具体查看：/Java/properties不直接支持中文解决方法。
 *
 *  Locale代表地区。资源文件可以有多个，分别包含不同Locale的资源。Java会根据客户的Locale来决定显示哪个资源文件里的内容。
 *  当运行Java Web程序时，Locale由客户端浏览器提供。Locale里面记录着客户的所在地区与语种信息。Locale代码格式形如 zh_CN，其中小写的 zh 为语种，表示简体中文，
 *  大写的 CN 为国家（或地区），表示中国。如果 xxxxx_zh_CN.properties 文件不存在，则会用 xxxxx.properties 中的资源。
 *
 * Servlet 资源国际化可使用 Eclipse 的 Externalize 功能。Eclipse 集成了 Java 类的资源国际化操作。在 Java 源文件上右击，选择 Source|Externalize String命令继续就可以
 * 自动生成 Message类、properties 资源文件，并把类中的字符串提取到 properties 文件中。
 */
public class paramDemo {
    private static final String BUNDLE_NAME = "com.wanghua.spring.i18n.param";

    //资源绑定，即会加载"com.wanghua.spring.i18n" 包中的 "param.properties" 与所有的形如 param_*_*.properties 的文件。然后根据用户不同的 Local 选择显示不同的 properties 文件内容。
    private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME);

    //返回带任务个参数的资源
    public static String getString(String key, Object... params) {
        try {
            String value = RESOURCE_BUNDLE.getString(key);
            return MessageFormat.format(value, params);
        } catch (MissingResourceException e) {
            return '!' + key + '!';
        }
    }

    public static void main(String[] args) throws Exception {
        System.out.println(getString("hello", "192.168.1.1", "zh_CN", "中文"));
    }
}
